home *** CD-ROM | disk | FTP | other *** search
- # Jedi Knight Cog Script
- #
- # WEAP_THERMDET.COG
- #
- # WEAPON 4 Script - Thermal Detonator
- #
- # Fun to use and handy for clearing some elbow room. Not recommending
- # for those with noodle arms. The longer you hold down the fire key
- # (CTRL/Z) the farther you throw the detonator.
- #
- # The primary fire throws the detonator with the 3 second delay, the
- # secondary makes it explode on impact.
- #
- # - Not affected by MagSealed sectors/surfaces.
- #
- # [YB & CYW]
- #
- # (C) 1997 LucasArts Entertainment Co. All Rights Reserved
- # ========================================================================================
-
- symbols
-
- model povModel=detv.3do local
- model povModel_m=detv_m.3do local
- model weaponMesh=detg.3do local
-
- keyframe mountAnim=detvmnt.key local
- keyframe dismountAnim=detvdis.key local
- keyframe povFireAnim=detvpst1.key local
- keyframe prePOVThrowAnim=detvpre1.key local
- #keyframe preThrowAnim=kyrthro0.key local
- keyframe holsterAnim=kyhlstr.key local
-
- template projectile=+grenade1 local
- template projectile1=+grenade2 local
- template projectileB=+dudgrenade local
-
- sound throwSound=ThermalThrow01.wav local
- sound clickSound=ThermClick01.wav local
- sound clickSound2=ThermClick02.wav local
- sound loopSound=ThermLoop01.wav local
-
- flex delayTime=1.0 local
- flex throwWait=0.8 local
- flex mountWait local
- flex autoAimFOV=10 local
- flex autoAimMaxDist=5 local
- flex holsterWait local
-
- thing player local
-
- int preThrowTrack local
- int selectTrack local
- int prePOVThrowTrack local
- int mode local
- int cocked=0 local
- int holsterTrack local
-
- int selectMode=1 local
-
- message startup
- message activated
- message deactivated
- message selected
- message deselected
- message autoselect
- message timer
- message newplayer
- message splash
-
- end
-
- # ========================================================================================
-
- code
-
- startup:
- // Setup delays and variables.
- mountWait = GetKeyLen(mountAnim);
-
- preThrowTrack=-1;
- selectTrack=-1;
- prePOVThrowTrack=-1;
-
- Return;
-
- # ........................................................................................
-
- activated:
- player = GetSourceRef();
- mode = GetSenderRef();
- if (mode > 1)
- Return;
-
- PlaySoundThing(clickSound[mode], player, 1.0, -1.0, -1.0, 0x80);
-
- // Cock arm back for throw.
- if(preThrowTrack == -1 && prePOVThrowTrack == -1)
- {
- prePOVThrowTrack = jkPlayPOVKey(player, prePOVThrowAnim, 1, 0x14);
- preThrowTrack = PlayMode( player, 38 );
- ActivateWeapon(player, 0, mode);
- }
- Return;
-
- # ........................................................................................
-
- deactivated:
- player = GetSourceRef();
- mode = GetSenderRef();
-
- delayTime = DeactivateWeapon(player, mode); // allow activated messages again.
-
- // Don't throw if controls are disabled.
- if (!(GetActorFlags(player) & 0x200000))
- {
- // Make sure both keys are up before continuing.
- if (GetCurWeaponMode() != -1)
- Return;
-
- // Set maximum scale factor (2 second hold.)
- if(delayTime > 2)
- delayTime = 2;
-
- // Set minimum scale factor
- if(mode == 0)
- {
- if(delayTime < 0.7) delayTime = 0.7;
- }
- else
- {
- if(delayTime < 0.25) delayTime = 0.25;
- }
-
- if(preThrowTrack != -1 && prePOVThrowTrack != -1)
- {
- jkStopPOVKey(player, prePOVThrowTrack, 0);
- StopKey(player, preThrowTrack, 0);
- preThrowTrack = -1;
- prePOVThrowTrack = -1;
- }
-
- if (GetInv(player, 93))
- {
- mode = 2;
- SendMessageEx(GetThingClassCog(player), skill, 1100, 0, 0, 0);
- }
-
- // Throw the appropriate detonator.
- SetPOVShake('0.0 -.003 0.0', '0.5 0.0 0.0', .05, 40.0);
- jkPlayPOVKey(player, povfireAnim, 1, 0x38);
- PlaySoundThing(throwSound, player, 1.0, 0.5, 2.5, 0x80);
- SendMessageEx(GetThingClassCog(GetLocalPlayerThing()), user1, 3, 0, 0, 0);
- FireProjectile(player, projectile[mode], -1, 15, '0.05 0 0', '0 0 0', delayTime, 0x1, 0.0, 0.0);
- ChangeInv(player, 4, -1.0);
- SetMountWait(player, throwWait);
-
- // If out of ammo try to autoswitch to another weapon
- // if autoswitch is enabled else just switch to fists.
- if(GetInv(player, 4) < 1)
- {
- if(GetAutoSwitch() & 1)
- {
- SelectWeapon(player, GetWeaponBin(AutoSelectWeapon(player, 1)));
- }
- else
- {
- SelectWeapon(player, 1);
- }
- }
- }
- else
- {
- if(preThrowTrack != -1 && prePOVThrowTrack != -1)
- {
- jkStopPOVKey(player, prePOVThrowTrack, 0);
- StopKey(player, preThrowTrack, 0);
- preThrowTrack = -1;
- prePOVThrowTrack = -1;
- }
- }
-
- jkSetWaggle(player, '0.0 0.0 0.0', 0);
- SetTimerEx(throwWait, 0, 0, 0);
-
- Return;
-
- # ........................................................................................
-
- timer:
- if (GetSenderId() == 0)
- {
- // Start waggling after the throw.
- jkSetWaggle(player, '10.0 7.0 0.0', 350);
- }
- else
- if (GetSenderId() == 2)
- {
- StopKey(player, holsterTrack, 0.0);
- }
- Return;
-
- # ........................................................................................
-
- selected:
- player = GetSourceRef();
-
- jkSetWaggle(player, '10.0 7.0 0.0', 350);
-
- // Play external mounting animation
- PlayMode(player, 40);
-
- // Setup the meshes and models.
- if (GetInv(player, 67) == 0.0)
- jkSetPOVModel(player, povModel); // Kyle hand
- else
- jkSetPOVModel(player, povModel_m); // Mara Hand
- SetArmedMode(player, 0);
- jkSetWeaponMesh(player, weaponMesh);
-
- // Play the animation (NOLOOP + UNIQUE + ENDPAUSE).
- // The animation is held at the last frame after it is played.
- selectTrack = jkPlayPOVKey(player, mountAnim, 0, 0x14);
- SetMountWait(player, GetKeyLen(mountAnim));
-
- // Clear Lightsaber flag, and enable activation messages.
- jkClearFlags(player, 0x5);
- SetCurWeapon(player, 4);
- SetMountWait(player, GetKeyLen(mountAnim));
-
- Return;
-
- # ........................................................................................
-
- deselected:
- player = GetSourceRef();
-
- jkPlayPOVKey(player, dismountAnim, 0, 18);
-
- holsterWait = GetKeyLen(holsterAnim);
- SetMountWait(player, holsterWait);
- holsterTrack = PlayKey(player, holsterAnim, 1, 0x4);
- SetTimerEx(holsterWait, 2, 0.0, 0.0);
- if(selectTrack != -1)
- {
- jkStopPOVKey(player, selectTrack, 0);
- selectTrack = -1;
- }
- jkSetWaggle(player, '0.0 0.0 0.0', 0);
- KillTimerEx(0);
-
- if(preThrowTrack != -1 && prePOVThrowTrack != -1)
- {
- jkStopPOVKey(player, prePOVThrowTrack, 0);
- StopKey(player, preThrowTrack, 0);
- preThrowTrack = -1;
- prePOVThrowTrack = -1;
- }
-
- Return;
-
- # ........................................................................................
-
- autoselect:
- selectMode = GetSenderRef();
- player = GetSourceRef();
-
- // If the player has ammo
- if(GetInv(player, 4) != 0)
- {
-
- // query for ammo
- if(selectMode == -1)
- {
- ReturnEx(400.0);
- Return;
- }
-
- if((selectMode == 0) && !(GetAutoPickup() & 2))
- {
- ReturnEx(400.0);
- Return;
- }
-
- if((selectMode == 1) && !(GetAutoSwitch() & 2))
- {
- ReturnEx(400.0);
- Return;
- }
-
- if((selectMode == 2) && !(GetAutoPickup() & 2))
- {
- ReturnEx(400.0);
- Return;
- }
-
- ReturnEx(-2.0);
- Return;
-
- }
- else
- {
- ReturnEx(-1.0);
- }
-
- Return;
-
- # ........................................................................................
-
- newplayer:
- if(preThrowTrack != -1 && prePOVThrowTrack != -1)
- {
- jkStopPOVKey(player, prePOVThrowTrack, 0);
- StopKey(player, preThrowTrack, 0);
- preThrowTrack = -1;
- prePOVThrowTrack = -1;
- }
- Return;
-
- # ........................................................................................
-
-
- end
-
-
-
-
-